using InverseClockWork.Cutscenes;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace InverseClockWork.Extra.Cutscenes
{
    public class ActionLerpTransform : CutsceneAction
    {
        public ExposedReference<Transform> transform;
        public GenericTarget from, to;
        public float duration = 5;

        private float Timer
        {
            get; set;
        }

        public override void EndAction(FrameData frameData)
        {
            var rTo = to.Resolve(frameData.director);
            var rTrans = frameData.Resolve(transform);
            rTrans.position = rTo.position;
            rTrans.rotation = rTo.rotation;
        }

        public override void StartAction(FrameData frameData)
        {
            var rFrom = from.Resolve(frameData.director);
            var rTrans = frameData.Resolve(transform);
            rTrans.position = rFrom.position;
            rTrans.rotation = rFrom.rotation;
            Timer = 0.0f;
        }

        public override void UpdateAction(FrameData frameData)
        {
            Timer += Time.deltaTime;

            var rFrom = from.Resolve(frameData.director);
            var rTo = to.Resolve(frameData.director);
            var rTrans = frameData.Resolve(transform);

            float lerp = Timer / duration;
            rTrans.position = Vector3.Lerp(rFrom.position, rTo.position, lerp);
            rTrans.rotation = Quaternion.Lerp(rFrom.rotation, rTo.rotation, lerp);
        }

        protected override bool IsComplete(FrameData frameData)
        {
            return Timer >= duration;
        }
    }
}